package com.gutsyzhan.bilibili.controller;

import com.gutsyzhan.bilibili.domain.JsonResponse;
import com.gutsyzhan.bilibili.service.FileService;
import com.gutsyzhan.bilibili.util.FastDFSUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;

@RestController
public class FileController {
    @Resource
    private FileService fileService;
    @Resource
    private FastDFSUtil fastDFSUtil;

    /**
     * 对文件进行分片处理
     * @param file 待分片的文件
     * @return
     * @throws Exception
     */
    @GetMapping("/slices")
    public JsonResponse slices(MultipartFile file) throws Exception {
        fastDFSUtil.convertFileToSlices(file);
        return JsonResponse.success();
    }

    /**
     * 上传分片文件
     * @param slice 要上传的分片本身
     * @param fileMd5 要上传文件的完整路径经过MD5加密后的唯一字符串
     * @param sliceNo 当前上传的分片序号
     * @param totalSliceNo 一共要上传的分片总数
     * @return
     */
    @PutMapping("/file-slices")
    public JsonResponse<String> uploadFileBySlices(MultipartFile slice, String fileMd5,
                                                   Integer sliceNo, Integer totalSliceNo) throws Exception {
        String filePath = fileService.uploadFileBySlices(slice, fileMd5, sliceNo, totalSliceNo);
        return new JsonResponse<>(filePath);
    }

    /**
     * 在服务器中生成对应文件二进制通过md5加密后的字符串
     * @param file 待加密的文件
     * @return
     * @throws Exception
     */
    @PostMapping("/md5files")
    public JsonResponse<String> getFileMd5(MultipartFile file) throws Exception {
        String fileMd5 = fileService.getFileMd5(file);
        return new JsonResponse<>(fileMd5);
    }
}